
AC_INIT(gtk-sharp, 2.99.4)

AM_INIT_AUTOMAKE([1.10 no-dist-gzip dist-bzip2 tar-ustar foreign])
AC_CANONICAL_HOST
AC_CONFIG_HEADERS(config.h)
AM_MAINTAINER_MODE
AC_CONFIG_MACRO_DIR([m4])

API_VERSION=3.0.0.0
AC_SUBST(API_VERSION)
CAIRO_API_VERSION=1.10.0.0
AC_SUBST(CAIRO_API_VERSION)
POLICY_VERSIONS=""
AC_SUBST(POLICY_VERSIONS)

PACKAGE_VERSION=gtk-sharp-3.0
AC_SUBST(PACKAGE_VERSION)

WIN64DEFINES=

AC_MSG_CHECKING([whether we're on Windows])

case "$host" in
	x86_64-*-mingw*|x86_64-*-cygwin*)
		WIN64DEFINES="-define:WIN64LONGS"
		platform_win32=yes
		AC_MSG_RESULT([yes, 64-bit])
		AC_DEFINE(PLATFORM_WIN32,1,[Platform is Win32])
		if test "x$cross_compiling" = "xno"; then
			CC="gcc -g"
			HOST_CC="gcc"
		fi
		;;
	*-*-mingw*|*-*-cygwin*)
		platform_win32=yes
		AC_MSG_RESULT([yes, 32-bit])
		AC_DEFINE(PLATFORM_WIN32,1,[Platform is Win32])
		if test "x$cross_compiling" = "xno"; then
			CC="gcc -g"
			HOST_CC="gcc"
		fi
		;;
	*)
		platform_win32=no
		AC_MSG_RESULT([no])
		;;
esac

AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)

AC_CHECK_TOOL(CC, gcc, gcc)
AC_PROG_CC
AC_PROG_INSTALL

dnl may require a specific autoconf version
dnl AC_PROG_CC_FOR_BUILD
dnl CC_FOR_BUILD not automatically detected
CC_FOR_BUILD=$CC
BUILD_EXEEXT=
if test "x$cross_compiling" = "xyes"; then
	CC_FOR_BUILD=cc
	BUILD_EXEEXT=""
fi
AC_SUBST(CC_FOR_BUILD)
AC_SUBST(HOST_CC)
AC_SUBST(BUILD_EXEEXT)

# Set STDC_HEADERS
AC_HEADER_STDC
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL

# not 64 bit clean in cross-compile
AC_CHECK_SIZEOF(void *, 4)

CFLAGS="${CFLAGS} -g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs  -Wshadow -Wpointer-arith -Wno-cast-qual -Wcast-align -Wwrite-strings"

if test "x$enable_maintainer_mode" = "xyes"; then
DEBUG_FLAGS='-debug'
RUNTIME_DEBUG_FLAGS=' --debug'
else
DEBUG_FLAGS=
RUNTIME_DEBUG_FLAGS=
AC_ARG_ENABLE(debug, [  --enable-debug          Build debugger (.mdb) files for dlls],
	DEBUG_FLAGS='-debug'
)
fi

enable_msi="no"
if test "x$platform_win32" = "xyes"; then
	AC_PATH_PROG(WIX, candle, no)
	if test "x$WIX" != "xno" ; then
		enable_msi="yes"
	fi
fi

AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
if test "x$PKG_CONFIG" = "xno"; then
	AC_MSG_ERROR([You need to install pkg-config])
fi

AC_CHECK_SIZEOF(off_t)
OFF_T_FLAGS="-define:OFF_T_$ac_cv_sizeof_off_t"
AC_SUBST(OFF_T_FLAGS)

MONO_REQUIRED_VERSION=3.2.8
PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)

AC_PATH_PROG(GACUTIL, gacutil, no)
if test "x$GACUTIL" = "xno" ; then
	AC_MSG_ERROR([No gacutil tool found. You need to install either the mono or .Net SDK.])
fi

AC_PATH_PROG(AL, al, no)
if test "x$AL" = "xno" ; then
	AC_MSG_ERROR([No al tool found. You need to install either the mono or .Net SDK.])
fi

if test "x$has_mono" = "xtrue"; then
GACUTIL_FLAGS='/package $(PACKAGE_VERSION) /gacdir $(DESTDIR)$(prefix)/lib'
GENERATED_SOURCES_FILES=generated/*/*.cs
GENERATED_SOURCES_OPTION=$GENERATED_SOURCES_FILES
ASSEMBLYINFO=/AssemblyInfo.cs
AC_PATH_PROG(RUNTIME, mono, no)

# libmono and glib required for gui-thread-check profiler module
PKG_CHECK_MODULES(PROFILER, mono-2 glib-2.0)
AM_CONDITIONAL(ENABLE_THREADCHECK, true)

# If mono is found, it's in the path.  Require it to be in the path at runtime as well
if test "x$RUNTIME" != "no" ; then
	RUNTIME="mono$RUNTIME_DEBUG_FLAGS"
fi

AC_PATH_PROG(CSC, csc, no)
if test `uname -s` = "Darwin"; then
	LIB_PREFIX=
	LIB_SUFFIX=.dylib
else
	LIB_PREFIX=.so
	LIB_SUFFIX=
fi
SDCHECK="`$GACUTIL /l |grep ^System.Drawing, | head -n1 |cut -f1 -d','`"
if test "x$SDCHECK" = "xSystem.Drawing"; then
	enable_dotnet=yes
else
	enable_dotnet=no
fi
dnl End of has_mono = true
else
dnl Check for .NET Framework
AC_PATH_PROG(CSC, csc.exe, no)
CSFLAGS="-nologo -platform:x86"
GACUTIL_FLAGS=
GENERATED_SOURCES_FILES="generated\\\\*.cs"
GENERATED_SOURCES_OPTION="-recurse:$GENERATED_SOURCES_FILES"
ASSEMBLYINFO=\\\\AssemblyInfo.cs
AM_CONDITIONAL(ENABLE_THREADCHECK, false)
enable_dotnet=yes

RUNTIME=
LIB_PREFIX=
LIB_SUFFIX=.dylib
fi

CS="C#"
if test "x$CSC" = "xno" ; then
	AC_MSG_ERROR([No $CS compiler found. You need to install either mono (>=$MONO_REQUIRED_VERSION) or .Net])
fi

AC_SUBST(RUNTIME)
AC_SUBST(CSC)
AC_SUBST(GACUTIL)
AC_SUBST(GACUTIL_FLAGS)
AC_SUBST(LIB_PREFIX)
AC_SUBST(LIB_SUFFIX)
AC_SUBST(GENERATED_SOURCES_FILES)
AC_SUBST(GENERATED_SOURCES_OPTION)
AC_SUBST(ASSEMBLYINFO)

GTK_REQUIRED_VERSION=3.0.0
GLIB_REQUIRED_VERSION=2.32.0

PKG_CHECK_MODULES(GLIB, gobject-2.0 >= $GLIB_REQUIRED_VERSION)
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)

PKG_CHECK_MODULES(GIO, gio-2.0 >= $GLIB_REQUIRED_VERSION)
AC_SUBST(GIO_CFLAGS)
AC_SUBST(GIO_LIBS)

CSFLAGS="$CSFLAGS $DEBUG_FLAGS $WIN64DEFINES"
AC_SUBST(CSFLAGS)

PKG_CHECK_MODULES(PANGO, pango)
AC_SUBST(PANGO_CFLAGS)
AC_SUBST(PANGO_LIBS)

PKG_CHECK_MODULES(ATK, atk)
AC_SUBST(ATK_CFLAGS)
AC_SUBST(ATK_LIBS)

PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED_VERSION)
AC_SUBST(GTK_CFLAGS)
AC_SUBST(GTK_LIBS)

AC_PATH_PROG(MDOC, mdoc, no)
if test "x$MDOC" = "xno"; then
  enable_monodoc=no
  doc_sources_dir=
else
  enable_monodoc=yes
  doc_sources_dir="`pkg-config --variable=sourcesdir monodoc`"
fi
AC_SUBST(MDOC)

AM_CONDITIONAL(ENABLE_DOTNET, test "x$enable_dotnet" = "xyes")
AM_CONDITIONAL(ENABLE_MONODOC, test "x$enable_monodoc" = "xyes")
AM_CONDITIONAL(ENABLE_MSI, test "x$enable_msi" = "xyes")

AC_SUBST(CFLAGS)

AC_OUTPUT([
AssemblyInfo.cs
Makefile
policy.config
sources/Makefile
parser/Makefile
parser/gapi-3.0.pc
parser/gapi3-parser
generator/Makefile
generator/gapi3-codegen
generator/gapi3-fixup
glib/Makefile
glib/glib-sharp-3.0.pc
glib/glib-sharp.dll.config
gio/Makefile
gio/gio-sharp-3.0.pc
gio/gio-sharp.dll.config
gio/glue/Makefile
cairo/AssemblyInfo.cs
cairo/Makefile
pango/Makefile
pango/pango-sharp.dll.config
pango/glue/Makefile
atk/Makefile
atk/atk-sharp.dll.config
atk/glue/Makefile
gdk/Makefile
gdk/gdk-sharp-3.0.pc
gdk/gdk-sharp.dll.config
gtk/Makefile
gtk/gtk-sharp-3.0.pc
gtk/gtk-sharp.dll.config
gtk/glue/Makefile
gtk/gui-thread-check/Makefile
gtk/gui-thread-check/profiler/Makefile
gtkdotnet/Makefile
gtkdotnet/gtk-dotnet.dll.config
gtkdotnet/gtk-dotnet-3.0.pc
doc/Makefile
msi/gtk-sharp-3.0.wxs
msi/Makefile
msi/unmanaged/Makefile
sample/GtkDemo/Makefile
sample/Makefile
sample/pixmaps/Makefile
sample/test/Makefile
sample/valtest/Makefile
sample/valtest/valtest.exe.config
sample/opaquetest/Makefile
sample/opaquetest/opaquetest.exe.config
sample/gio/Makefile
sample/gtk-gio/Makefile
])

if test x$platform_win32 = xyes; then
   # Get rid of 'cyg' prefixes in library names
   sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
fi

if test "x$enable_mono_cairo" = "xyes"; then
  cairo_comment="building local copy"
else
  cairo_comment="using system assembly"
fi

echo "---"
echo "Configuration summary"
echo ""
echo "   * Installation prefix = $prefix"
echo "   * $CS compiler: $CSC $CSFLAGS"
echo ""
echo "   Optional assemblies included in the build:"
echo ""
echo "      * gtk-dotnet.dll: $enable_dotnet"
echo ""
echo "      NOTE: if any of the above say 'no' you may install the"
echo "            corresponding development packages for them, rerun"
echo "            autogen.sh to include them in the build."
echo ""
echo "   * Documentation build enabled: $enable_monodoc "
if test "x$enable_monodoc" = "xyes" -a "x$doc_sources_dir" != "x$prefix/lib/monodoc/sources"; then
  echo "      WARNING: The install prefix is different than the monodoc prefix."
  echo "               Monodoc will not be able to load the documentation."
fi
echo "---"

if test "x$has_mono" = "xtrue"; then
	mono_prefix=`pkg-config --variable=prefix mono`
	mono_prefix_canonical=`readlink -m $mono_prefix`
	if test "x$mono_prefix_canonical" != "x$prefix"; then
		AC_MSG_WARN(Prefix to use ($prefix) is not the same as Mono's ($mono_prefix_canonical).
			Consider using ./configure --prefix=$mono_prefix_canonical
			See the README for more information.
		)
	fi
fi
